コンピュータアーキテクチャのエッセンス [第 2 版]
著 : Douglas E. Comer
訳 : 吉川邦夫
https://m.media-amazon.com/images/I/81OVeAf0mpL._SL1500_.jpg
Amazon : https://amzn.to/3Re3FK4
本書は、プログラマが知っているべきハードウェアの基本的側面を説明する書籍
コンピュータアーキテクチャのテキストの大半は、ハードウェア設計を学ぶ学生に向けてハードウェア技術者が書いたものなので、本書は珍しい
1 部はデジタル回路の基礎、2 部から 4 部まではプロセッサとメモリと入出力、5 部は高度な話題
テキストとラボの課題はパデュー大学で扱っているもの
1 章 序論と概要
ソフトウェア開発のためにコンピュータアーキテクチャを学ぶべき理由
ハードウェアを理解することで、より小さく、高速で、エラーを起こしにくいコードを書けるから
1 部 基礎
2 章 デジタル論理回路の基礎
デジタルコンピュータとアナログコンピュータ
現代のデジタルコンピュータ
フィードバックは複雑なデジタル回路の中枢
複数の要素を扱うために、ソフトウェアでは反復するが、ハードウェアでは複製する
抽象化
ほとんどのデジタル回路は集積回路 (IC : integrated circuit) から作られる
ほとんどのデジタルシステムはプリント回路基板 (PCB : Printed Circuit Board) で作られる
3 章 データとプログラムの表現
ブール代数の論理値 (0 と 1) という抽象
2 進数、ビット、バイト
ビット列
ビット列を人間が扱いやすいように 16 進記法を用いることが多い
2 部 プロセッサ
4 章 さまざまなプロセッサと計算エンジン
プロセッサ
コンピュータ構成の 2 つの基本アプローチ
ハーバード・アーキテクチャ
フォン・ノイマン・アーキテクチャ
プログラム内蔵方式
クロック周期と取得・実行サイクル
クロックが速ければ処理速度も高いが、クロック周期と取得・実行サイクルの進行周期は同一ではない
命令によって必要なサイクルは違う
取得・実行サイクルの開始と終了
5 章 プロセッサの種類と命令セット
プログラマブルなプロセッサの設計において、アーキテクトは次の決定的な判断を下す
命令セットアーキテクチャ (ISA)
命令セット
命令表現 (命令フォーマット)
6 章 データパスと命令実行
データパス、データパス図
マルチプレクサ
7 章 オペランドのアドレッシングと命令表現
1 オペランド命令ではアキュミュレータという特別なレジスタが使われる
定数オペランドを即値と呼ぶ
フォン・ノイマンのボトルネック
オペランド符号化
明示的なオペランド符号化 : 型情報をオペランドに紐づける
暗黙的なオペランド符号化 : オペランドの型に応じたオペコード
8 章 CPU : マイクロコード、保護、プロセッサモード
コンピュータの歴史では、初期に集中という考えが生まれ、できるだけ多くの機能を 1 つのプロセッサに集めようとした → 中央処理装置 (CPU)
現在のコンピュータシステムは分散アプローチになったが、CPU という言葉は残っている
CPU の実行モード、特権と保護
マイクロコード
複雑な CPU を構築するため、CPU を 2 つに分けて構築する場合がある
マイクロコントローラと呼ばれる高速で小さなプロセッサ
マイクロコードによってマクロ命令セットが実装される
FPGA (Field Programmable Gate Array)
命令のアウトオブオーダー実行、スコアボードでの追跡
9 章 アセンブリ言語とプログラミングパラダイム
低水準プログラミングやそのプログラミング言語はコンピュータアーキテクチャの一部ではないが、密接な関係
プログラミング言語は高水準プログラミング言語と低水準プログラミング言語の 2 種類
アセンブリ言語、アセンブラ
3 部 メモリ
10 章 メモリとストレージ
メモリと聞いて多くのプログラマが思い浮かべるのは主記憶 (メインメモリ) のこと
記憶階層
11 章 物理メモリと物理アドレッシング
ほとんどのコンピュータで主記憶システムとして使われる種類のメモリをランダムアクセスメモリ (RAM) という
メモリの性能
演算の連なりを、どれだけ速く実行できるか? → メモリサイクル時間
複数の物理メモリの利用
メモリバンク : 複数の物理メモリで大きな 1 つのメモリを構成
メモリのインターリーブ (相互配置) : アドレスが連続するワードを、別々のメモリモジュールに互い違いに配置
Content Addressable Memory (CAM)
12 章 キャッシュとキャッシング
キャッシング、キャッシュ、メモリキャッシュ
13 章 仮想メモリ技術と仮想アドレッシング
仮想メモリ (VM)
4 部 入出力
14 章 入出力の概念と用語
コンピュータと外部デバイスの相互作用は 2 種類
コンピュータがデバイスを制御
コンピュータとデバイスがデータを交換
I/O インターフェイスは 2 つのカテゴリ
パラレルインターフェイス : 複数のデータビットを同時に転送できる
シリアルインターフェイス : どの瞬間も 1 ビットのデータしか転送できない
クロック周期の違いをインターフェイスでどう調停するか?
セルフクロッキング
双方向転送
全二重交信 : 双方向の転送を同時に進行可能
反二重交信 : 同時に一方向の転送しかできない
スループット (転送能力)、レイテンシ
多重化のテクニック : 大きなデータをハードウェアで細分化して 1 片ずつ転送する
マルチプレクサ、デマルチプレクサというハードウェア
15 章 バスとバスアーキテクチャ
バス
スイッチングファブリック
バスは一度に 1 つの転送しかできないが、スイッチングファブリックは複数の転送を同時にできる
16 章 プログラム駆動と割り込み駆動の入出力
最初期のコンピュータはプログラム駆動の入出力
デバイスに存在する回路を CPU が動かしていく
プロセッサが入出力デバイスとの同期に使う基本的な方法はポーリング
デバイスが使うアドレスの集合を CSR (Control and Status Register) と総称する
1950 年代から 1960 年代にかけて、プロセッサと入出力装置の処理速度の違いが意識される → 割り込み駆動の入出力へ
割り込み機構
最近のバスはコンピュータの実行中にデバイスを抜き差しできる
USB はいつでもユーザーがデバイスを装着できる
USB はメインバスのひとつのデバイスのように振る舞い、USB ハンドラが 2 次的なデバイス固有のハンドラを扱う
ダムデバイスとスマートデバイス
スマートな I/O デバイスが CPU を使わずにメモリにデータを転送 → Direct Memory Access (DMA)
ほとんどのアーキテクチャではメモリとデバイスの両方が中心的なバスに接続されている
I/O デバイスに入っているプロセッサが、フェッチやストアの命令を出す
DMA のさらなる最適化の技法としてバッファの連鎖と呼ばれるテクニック
スキャッターリードとギャザーライト
演算の連鎖
17 章 デバイス入出力とバッファのプログラミング
プログラマの視点から入出力を考察する章
デバイスドライバの意義
デバイスに依存しないこと (隠蔽、あるいはカプセル化)
多くのプログラミングシステムにおいて、入出力はプログラマから隠される
ハードウェアデバイスを操作する代わりに、プログラマが使うのは、ファイルやウィンドウのような抽象
埋め込みシステムでも、デバイスドライバと直接やりとりする代わりに仲介となるランタイムライブラリに依存することが多い
柔軟性と変更の容易さという利点
「open/read/write/close」 のパラダイム
デバイスドライバと通信するためにシステムコールを使う際のオーバーヘッドは大きい
性能を最適化するためには、システムコールの回数を最小化すること
バッファリング : システムコールの回数を減らすために、データをバッファに蓄積する
flush 関数による明示的なシステムコールの呼び出し
5 部 高度な話題
18 章 並列処理
並列処理は性能を上げる主なテクニックのひとつ
並列アーキテクチャの設計における 3 つの課題
並列処理においてプログラマが利用できる機構と機能
ロックと排他制御
並列ハードウェアは、信頼性を向上させ、故障を防ぐためにも利用できる
冗長ハードウェア
分散アーキテクチャ
ネットワーククラスタ、クラスタコンピュータ
グリッドコンピューティング
並列処理はスーパーコンピュータで重要な役割を果たしてきた
19 章 パイプライン処理
パイプライン処理は性能を上げる 2 つめの主なテクニック
20 章 電力とエネルギー
電力消費と総合的なエネルギー消費がコンピュータシステムの設計で重要性を増している
電力はエネルギーの消費率
デジタル回路が消費する電力
瞬時の電力消費は、ピーク電力の利用が重視されるデータセンターや、その他の大規模な設備に関連して語られることが多い
電力の消費に関して設計者が重視すべき側面
ピークでも十分な電力を供給できるようにするメガワット単位の給電の問題
デジタルデバイスの冷却
コンピュータシステムにおける電力密度
コンピュータの消費電力を下げる方法
エネルギー利用のソフトウェア制御
21 章 性能評価
コンピュータは汎用的に使えるので、あるシステムの性能は実行するタスクに依存する
科学的計算、科学的アプリケーションでは浮動小数点演算の性能に着目
FLOPS
MIPS
SPEC
コンピュータ性能
アムダールの法則
22 章 アーキテクチャのサンプルと階層構造
アーキテクチャは複数の抽象レベルで表現できる
コンピュータアーキテクチャの階層構造
23 章 ハードウェアのモジュール化
モジュール化の動機
ハードウェアのモジュールとソフトウェアのモジュール
付録
ソルダーレスブレッドボード
Intel x86 と x86-64
ARM
#書籍 #文献